home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / include / madwifi / net80211 / ieee80211_ioctl.h < prev    next >
C/C++ Source or Header  |  2006-05-11  |  26KB  |  617 lines

  1. /*-
  2.  * Copyright (c) 2001 Atsushi Onoe
  3.  * Copyright (c) 2002-2005 Sam Leffler, Errno Consulting
  4.  * All rights reserved.
  5.  *
  6.  * Redistribution and use in source and binary forms, with or without
  7.  * modification, are permitted provided that the following conditions
  8.  * are met:
  9.  * 1. Redistributions of source code must retain the above copyright
  10.  *    notice, this list of conditions and the following disclaimer.
  11.  * 2. Redistributions in binary form must reproduce the above copyright
  12.  *    notice, this list of conditions and the following disclaimer in the
  13.  *    documentation and/or other materials provided with the distribution.
  14.  * 3. The name of the author may not be used to endorse or promote products
  15.  *    derived from this software without specific prior written permission.
  16.  *
  17.  * Alternatively, this software may be distributed under the terms of the
  18.  * GNU General Public License ("GPL") version 2 as published by the Free
  19.  * Software Foundation.
  20.  *
  21.  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
  22.  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  23.  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  24.  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
  25.  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
  26.  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  27.  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  28.  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  29.  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  30.  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  31.  *
  32.  * $Id: ieee80211_ioctl.h 1453 2006-02-19 17:19:27Z mrenzmann $
  33.  */
  34. #ifndef _NET80211_IEEE80211_IOCTL_H_
  35. #define _NET80211_IEEE80211_IOCTL_H_
  36.  
  37. /*
  38.  * IEEE 802.11 ioctls.
  39.  */
  40. #include <net80211/_ieee80211.h>
  41. #include <net80211/ieee80211.h>
  42. #include <net80211/ieee80211_crypto.h>
  43.  
  44. /*
  45.  * Per/node (station) statistics available when operating as an AP.
  46.  */
  47. struct ieee80211_nodestats {
  48.     u_int32_t ns_rx_data;        /* rx data frames */
  49.     u_int32_t ns_rx_mgmt;        /* rx management frames */
  50.     u_int32_t ns_rx_ctrl;        /* rx control frames */
  51.     u_int32_t ns_rx_ucast;        /* rx unicast frames */
  52.     u_int32_t ns_rx_mcast;        /* rx multi/broadcast frames */
  53.     u_int64_t ns_rx_bytes;        /* rx data count (bytes) */
  54.     u_int64_t ns_rx_beacons;        /* rx beacon frames */
  55.     u_int32_t ns_rx_proberesp;    /* rx probe response frames */
  56.  
  57.     u_int32_t ns_rx_dup;        /* rx discard because it's a dup */
  58.     u_int32_t ns_rx_noprivacy;    /* rx w/ wep but privacy off */
  59.     u_int32_t ns_rx_wepfail;        /* rx wep processing failed */
  60.     u_int32_t ns_rx_demicfail;    /* rx demic failed */
  61.     u_int32_t ns_rx_decap;        /* rx decapsulation failed */
  62.     u_int32_t ns_rx_defrag;        /* rx defragmentation failed */
  63.     u_int32_t ns_rx_disassoc;    /* rx disassociation */
  64.     u_int32_t ns_rx_deauth;        /* rx deauthentication */
  65.     u_int32_t ns_rx_decryptcrc;    /* rx decrypt failed on crc */
  66.     u_int32_t ns_rx_unauth;        /* rx on unauthorized port */
  67.     u_int32_t ns_rx_unencrypted;    /* rx unecrypted w/ privacy */
  68.  
  69.     u_int32_t ns_tx_data;        /* tx data frames */
  70.     u_int32_t ns_tx_mgmt;        /* tx management frames */
  71.     u_int32_t ns_tx_ucast;        /* tx unicast frames */
  72.     u_int32_t ns_tx_mcast;        /* tx multi/broadcast frames */
  73.     u_int64_t ns_tx_bytes;        /* tx data count (bytes) */
  74.     u_int32_t ns_tx_probereq;    /* tx probe request frames */
  75.     u_int32_t ns_tx_uapsd;        /* tx on uapsd queue */
  76.  
  77.     u_int32_t ns_tx_novlantag;    /* tx discard due to no tag */
  78.     u_int32_t ns_tx_vlanmismatch;    /* tx discard due to of bad tag */
  79.  
  80.     u_int32_t ns_tx_eosplost;    /* uapsd EOSP retried out */
  81.  
  82.     u_int32_t ns_ps_discard;        /* ps discard due to of age */
  83.  
  84.     u_int32_t ns_uapsd_triggers;    /* uapsd triggers */
  85.  
  86.     /* MIB-related state */
  87.     u_int32_t ns_tx_assoc;        /* [re]associations */
  88.     u_int32_t ns_tx_assoc_fail;    /* [re]association failures */
  89.     u_int32_t ns_tx_auth;        /* [re]authentications */
  90.     u_int32_t ns_tx_auth_fail;    /* [re]authentication failures*/
  91.     u_int32_t ns_tx_deauth;        /* deauthentications */
  92.     u_int32_t ns_tx_deauth_code;    /* last deauth reason */
  93.     u_int32_t ns_tx_disassoc;    /* disassociations */
  94.     u_int32_t ns_tx_disassoc_code;    /* last disassociation reason */
  95.     u_int32_t ns_psq_drops;        /* power save queue drops */
  96. };
  97.  
  98. /*
  99.  * Summary statistics.
  100.  */
  101. struct ieee80211_stats {
  102.     u_int32_t is_rx_badversion;    /* rx frame with bad version */
  103.     u_int32_t is_rx_tooshort;    /* rx frame too short */
  104.     u_int32_t is_rx_wrongbss;    /* rx from wrong bssid */
  105.     u_int32_t is_rx_dup;        /* rx discard due to it's a dup */
  106.     u_int32_t is_rx_wrongdir;    /* rx w/ wrong direction */
  107.     u_int32_t is_rx_mcastecho;    /* rx discard due to of mcast echo */
  108.     u_int32_t is_rx_notassoc;    /* rx discard due to sta !assoc */
  109.     u_int32_t is_rx_noprivacy;    /* rx w/ wep but privacy off */
  110.     u_int32_t is_rx_unencrypted;    /* rx w/o wep and privacy on */
  111.     u_int32_t is_rx_wepfail;        /* rx wep processing failed */
  112.     u_int32_t is_rx_decap;        /* rx decapsulation failed */
  113.     u_int32_t is_rx_mgtdiscard;    /* rx discard mgt frames */
  114.     u_int32_t is_rx_ctl;        /* rx discard ctrl frames */
  115.     u_int32_t is_rx_beacon;        /* rx beacon frames */
  116.     u_int32_t is_rx_rstoobig;    /* rx rate set truncated */
  117.     u_int32_t is_rx_elem_missing;    /* rx required element missing*/
  118.     u_int32_t is_rx_elem_toobig;    /* rx element too big */
  119.     u_int32_t is_rx_elem_toosmall;    /* rx element too small */
  120.     u_int32_t is_rx_elem_unknown;    /* rx element unknown */
  121.     u_int32_t is_rx_badchan;        /* rx frame w/ invalid chan */
  122.     u_int32_t is_rx_chanmismatch;    /* rx frame chan mismatch */
  123.     u_int32_t is_rx_nodealloc;    /* rx frame dropped */
  124.     u_int32_t is_rx_ssidmismatch;    /* rx frame ssid mismatch  */
  125.     u_int32_t is_rx_auth_unsupported;/* rx w/ unsupported auth alg */
  126.     u_int32_t is_rx_auth_fail;    /* rx sta auth failure */
  127.     u_int32_t is_rx_auth_countermeasures;/* rx auth discard due to CM */
  128.     u_int32_t is_rx_assoc_bss;    /* rx assoc from wrong bssid */
  129.     u_int32_t is_rx_assoc_notauth;    /* rx assoc w/o auth */
  130.     u_int32_t is_rx_assoc_capmismatch;/* rx assoc w/ cap mismatch */
  131.     u_int32_t is_rx_assoc_norate;    /* rx assoc w/ no rate match */
  132.     u_int32_t is_rx_assoc_badwpaie;    /* rx assoc w/ bad WPA IE */
  133.     u_int32_t is_rx_deauth;        /* rx deauthentication */
  134.     u_int32_t is_rx_disassoc;    /* rx disassociation */
  135.     u_int32_t is_rx_badsubtype;    /* rx frame w/ unknown subtype*/
  136.     u_int32_t is_rx_nobuf;        /* rx failed for lack of buf */
  137.     u_int32_t is_rx_decryptcrc;    /* rx decrypt failed on crc */
  138.     u_int32_t is_rx_ahdemo_mgt;    /* rx discard ahdemo mgt frame*/
  139.     u_int32_t is_rx_bad_auth;    /* rx bad auth request */
  140.     u_int32_t is_rx_unauth;        /* rx on unauthorized port */
  141.     u_int32_t is_rx_badkeyid;    /* rx w/ incorrect keyid */
  142.     u_int32_t is_rx_ccmpreplay;    /* rx seq# violation (CCMP) */
  143.     u_int32_t is_rx_ccmpformat;    /* rx format bad (CCMP) */
  144.     u_int32_t is_rx_ccmpmic;        /* rx MIC check failed (CCMP) */
  145.     u_int32_t is_rx_tkipreplay;    /* rx seq# violation (TKIP) */
  146.     u_int32_t is_rx_tkipformat;    /* rx format bad (TKIP) */
  147.     u_int32_t is_rx_tkipmic;        /* rx MIC check failed (TKIP) */
  148.     u_int32_t is_rx_tkipicv;        /* rx ICV check failed (TKIP) */
  149.     u_int32_t is_rx_badcipher;    /* rx failed due to of key type */
  150.     u_int32_t is_rx_nocipherctx;    /* rx failed due to key !setup */
  151.     u_int32_t is_rx_acl;        /* rx discard due to of acl policy */
  152.     u_int32_t is_rx_ffcnt;        /* rx fast frames */
  153.     u_int32_t is_rx_badathtnl;       /* driver key alloc failed */
  154.     u_int32_t is_tx_nobuf;        /* tx failed for lack of buf */
  155.     u_int32_t is_tx_nonode;        /* tx failed for no node */
  156.     u_int32_t is_tx_unknownmgt;    /* tx of unknown mgt frame */
  157.     u_int32_t is_tx_badcipher;    /* tx failed due to of key type */
  158.     u_int32_t is_tx_nodefkey;    /* tx failed due to no defkey */
  159.     u_int32_t is_tx_noheadroom;    /* tx failed due to no space */
  160.     u_int32_t is_tx_ffokcnt;        /* tx fast frames sent success */
  161.     u_int32_t is_tx_fferrcnt;    /* tx fast frames sent success */
  162.     u_int32_t is_scan_active;    /* active scans started */
  163.     u_int32_t is_scan_passive;    /* passive scans started */
  164.     u_int32_t is_node_timeout;    /* nodes timed out inactivity */
  165.     u_int32_t is_crypto_nomem;    /* no memory for crypto ctx */
  166.     u_int32_t is_crypto_tkip;    /* tkip crypto done in s/w */
  167.     u_int32_t is_crypto_tkipenmic;    /* tkip en-MIC done in s/w */
  168.     u_int32_t is_crypto_tkipdemic;    /* tkip de-MIC done in s/w */
  169.     u_int32_t is_crypto_tkipcm;    /* tkip counter measures */
  170.     u_int32_t is_crypto_ccmp;    /* ccmp crypto done in s/w */
  171.     u_int32_t is_crypto_wep;        /* wep crypto done in s/w */
  172.     u_int32_t is_crypto_setkey_cipher;/* cipher rejected key */
  173.     u_int32_t is_crypto_setkey_nokey;/* no key index for setkey */
  174.     u_int32_t is_crypto_delkey;    /* driver key delete failed */
  175.     u_int32_t is_crypto_badcipher;    /* unknown cipher */
  176.     u_int32_t is_crypto_nocipher;    /* cipher not available */
  177.     u_int32_t is_crypto_attachfail;    /* cipher attach failed */
  178.     u_int32_t is_crypto_swfallback;    /* cipher fallback to s/w */
  179.     u_int32_t is_crypto_keyfail;    /* driver key alloc failed */
  180.     u_int32_t is_crypto_enmicfail;    /* en-MIC failed */
  181.     u_int32_t is_ibss_capmismatch;    /* merge failed-cap mismatch */
  182.     u_int32_t is_ibss_norate;    /* merge failed-rate mismatch */
  183.     u_int32_t is_ps_unassoc;        /* ps-poll for unassoc. sta */
  184.     u_int32_t is_ps_badaid;        /* ps-poll w/ incorrect aid */
  185.     u_int32_t is_ps_qempty;        /* ps-poll w/ nothing to send */
  186. };
  187.  
  188. /*
  189.  * Max size of optional information elements.  We artificially
  190.  * constrain this; it's limited only by the max frame size (and
  191.  * the max parameter size of the wireless extensions).
  192.  */
  193. #define    IEEE80211_MAX_OPT_IE    256
  194.  
  195. /*
  196.  * WPA/RSN get/set key request.  Specify the key/cipher
  197.  * type and whether the key is to be used for sending and/or
  198.  * receiving.  The key index should be set only when working
  199.  * with global keys (use IEEE80211_KEYIX_NONE for ``no index'').
  200.  * Otherwise a unicast/pairwise key is specified by the bssid
  201.  * (on a station) or mac address (on an ap).  They key length
  202.  * must include any MIC key data; otherwise it should be no
  203.  more than IEEE80211_KEYBUF_SIZE.
  204.  */
  205. struct ieee80211req_key {
  206.     u_int8_t ik_type;        /* key/cipher type */
  207.     u_int8_t ik_pad;
  208.     u_int16_t ik_keyix;        /* key index */
  209.     u_int8_t ik_keylen;        /* key length in bytes */
  210.     u_int8_t ik_flags;
  211. /* NB: IEEE80211_KEY_XMIT and IEEE80211_KEY_RECV defined elsewhere */
  212. #define    IEEE80211_KEY_DEFAULT    0x80    /* default xmit key */
  213.     u_int8_t ik_macaddr[IEEE80211_ADDR_LEN];
  214.     u_int64_t ik_keyrsc;        /* key receive sequence counter */
  215.     u_int64_t ik_keytsc;        /* key transmit sequence counter */
  216.     u_int8_t ik_keydata[IEEE80211_KEYBUF_SIZE+IEEE80211_MICBUF_SIZE];
  217. };
  218.  
  219. /*
  220.  * Delete a key either by index or address.  Set the index
  221.  * to IEEE80211_KEYIX_NONE when deleting a unicast key.
  222.  */
  223. struct ieee80211req_del_key {
  224.     u_int8_t idk_keyix;        /* key index */
  225.     u_int8_t idk_macaddr[IEEE80211_ADDR_LEN];
  226. };
  227.  
  228. /*
  229.  * MLME state manipulation request.  IEEE80211_MLME_ASSOC
  230.  * only makes sense when operating as a station.  The other
  231.  * requests can be used when operating as a station or an
  232.  * ap (to effect a station).
  233.  */
  234. struct ieee80211req_mlme {
  235.     u_int8_t im_op;            /* operation to perform */
  236. #define    IEEE80211_MLME_ASSOC        1    /* associate station */
  237. #define    IEEE80211_MLME_DISASSOC        2    /* disassociate station */
  238. #define    IEEE80211_MLME_DEAUTH        3    /* deauthenticate station */
  239. #define    IEEE80211_MLME_AUTHORIZE    4    /* authorize station */
  240. #define    IEEE80211_MLME_UNAUTHORIZE    5    /* unauthorize station */
  241. #define IEEE80211_MLME_CLEAR_STATS    6    /* clear station statistic */
  242.     u_int8_t im_ssid_len;        /* length of optional ssid */
  243.     u_int16_t im_reason;        /* 802.11 reason code */
  244.     u_int8_t im_macaddr[IEEE80211_ADDR_LEN];
  245.     u_int8_t im_ssid[IEEE80211_NWID_LEN];
  246. };
  247.  
  248. /* 
  249.  * MAC ACL operations.
  250.  */
  251. enum {
  252.     IEEE80211_MACCMD_POLICY_OPEN    = 0,    /* set policy: no ACL's */
  253.     IEEE80211_MACCMD_POLICY_ALLOW    = 1,    /* set policy: allow traffic */
  254.     IEEE80211_MACCMD_POLICY_DENY    = 2,    /* set policy: deny traffic */
  255.     IEEE80211_MACCMD_FLUSH        = 3,    /* flush ACL database */
  256.     IEEE80211_MACCMD_DETACH        = 4,    /* detach ACL policy */
  257. };
  258.  
  259. /*
  260.  * Set the active channel list.  Note this list is
  261.  * intersected with the available channel list in
  262.  * calculating the set of channels actually used in
  263.  * scanning.
  264.  */
  265. struct ieee80211req_chanlist {
  266.     u_int8_t ic_channels[IEEE80211_CHAN_BYTES];
  267. };
  268.  
  269. /*
  270.  * Get the active channel list info.
  271.  */
  272. struct ieee80211req_chaninfo {
  273.     u_int ic_nchans;
  274.     struct ieee80211_channel ic_chans[IEEE80211_CHAN_MAX];
  275. };
  276.  
  277. /*
  278.  * Retrieve the WPA/RSN information element for an associated station.
  279.  */
  280. struct ieee80211req_wpaie {
  281.     u_int8_t    wpa_macaddr[IEEE80211_ADDR_LEN];
  282.     u_int8_t    wpa_ie[IEEE80211_MAX_OPT_IE];
  283.     u_int8_t    rsn_ie[IEEE80211_MAX_OPT_IE];
  284. };
  285.  
  286. /*
  287.  * Retrieve per-node statistics.
  288.  */
  289. struct ieee80211req_sta_stats {
  290.     union {
  291.         /* NB: explicitly force 64-bit alignment */
  292.         u_int8_t macaddr[IEEE80211_ADDR_LEN];
  293.         u_int64_t pad;
  294.     } is_u;
  295.     struct ieee80211_nodestats is_stats;
  296. };
  297.  
  298. /*
  299.  * Station information block; the mac address is used
  300.  * to retrieve other data like stats, unicast key, etc.
  301.  */
  302. struct ieee80211req_sta_info {
  303.     u_int16_t isi_len;        /* length (mult of 4) */
  304.     u_int16_t isi_freq;        /* MHz */
  305.     u_int16_t isi_flags;        /* channel flags */
  306.     u_int16_t isi_state;        /* state flags */
  307.     u_int8_t isi_authmode;        /* authentication algorithm */
  308.     u_int8_t isi_rssi;
  309.     u_int16_t isi_capinfo;        /* capabilities */
  310.     u_int8_t isi_athflags;        /* Atheros capabilities */
  311.     u_int8_t isi_erp;        /* ERP element */
  312.     u_int8_t isi_macaddr[IEEE80211_ADDR_LEN];
  313.     u_int8_t isi_nrates;        /* negotiated rates */
  314.     u_int8_t isi_rates[IEEE80211_RATE_MAXSIZE];
  315.     u_int8_t isi_txrate;        /* index to isi_rates[] */
  316.     u_int16_t isi_ie_len;        /* IE length */
  317.     u_int16_t isi_associd;        /* assoc response */
  318.     u_int16_t isi_txpower;        /* current tx power */
  319.     u_int16_t isi_vlan;        /* vlan tag */
  320.     u_int16_t isi_txseqs[17];    /* seq to be transmitted */
  321.     u_int16_t isi_rxseqs[17];    /* seq previous for qos frames*/
  322.     u_int16_t isi_inact;        /* inactivity timer */
  323.     u_int8_t isi_uapsd;        /* UAPSD queues */
  324.     u_int8_t isi_opmode;        /* sta operating mode */
  325.  
  326.     /* XXX frag state? */
  327.     /* variable length IE data */
  328. };
  329.  
  330. enum {
  331.     IEEE80211_STA_OPMODE_NORMAL,
  332.     IEEE80211_STA_OPMODE_XR
  333. };
  334.  
  335. /*
  336.  * Retrieve per-station information; to retrieve all
  337.  * specify a mac address of ff:ff:ff:ff:ff:ff.
  338.  */
  339. struct ieee80211req_sta_req {
  340.     union {
  341.         /* NB: explicitly force 64-bit alignment */
  342.         u_int8_t macaddr[IEEE80211_ADDR_LEN];
  343.         u_int64_t pad;
  344.     } is_u;
  345.     struct ieee80211req_sta_info info[1];    /* variable length */
  346. };
  347.  
  348. /*
  349.  * Get/set per-station tx power cap.
  350.  */
  351. struct ieee80211req_sta_txpow {
  352.     u_int8_t    it_macaddr[IEEE80211_ADDR_LEN];
  353.     u_int8_t    it_txpow;
  354. };
  355.  
  356. /*
  357.  * WME parameters are set and return using i_val and i_len.
  358.  * i_val holds the value itself.  i_len specifies the AC
  359.  * and, as appropriate, then high bit specifies whether the
  360.  * operation is to be applied to the BSS or ourself.
  361.  */
  362. #define    IEEE80211_WMEPARAM_SELF    0x0000        /* parameter applies to self */
  363. #define    IEEE80211_WMEPARAM_BSS    0x8000        /* parameter applies to BSS */
  364. #define    IEEE80211_WMEPARAM_VAL    0x7fff        /* parameter value */
  365.  
  366. /*
  367.  * Scan result data returned for IEEE80211_IOC_SCAN_RESULTS.
  368.  */
  369. struct ieee80211req_scan_result {
  370.     u_int16_t isr_len;        /* length (mult of 4) */
  371.     u_int16_t isr_freq;        /* MHz */
  372.     u_int16_t isr_flags;        /* channel flags */
  373.     u_int8_t isr_noise;
  374.     u_int8_t isr_rssi;
  375.     u_int8_t isr_intval;        /* beacon interval */
  376.     u_int16_t isr_capinfo;        /* capabilities */
  377.     u_int8_t isr_erp;        /* ERP element */
  378.     u_int8_t isr_bssid[IEEE80211_ADDR_LEN];
  379.     u_int8_t isr_nrates;
  380.     u_int8_t isr_rates[IEEE80211_RATE_MAXSIZE];
  381.     u_int8_t isr_ssid_len;        /* SSID length */
  382.     u_int8_t isr_ie_len;        /* IE length */
  383.     u_int8_t isr_pad[5];
  384.     /* variable length SSID followed by IE data */
  385. };
  386.  
  387. #ifdef __FreeBSD__
  388. /*
  389.  * FreeBSD-style ioctls.
  390.  */
  391. /* the first member must be matched with struct ifreq */
  392. struct ieee80211req {
  393.     char i_name[IFNAMSIZ];    /* if_name, e.g. "wi0" */
  394.     u_int16_t i_type;    /* req type */
  395.     int16_t     i_val;        /* Index or simple value */
  396.     int16_t     i_len;        /* Index or simple value */
  397.     void *i_data;        /* Extra data */
  398. };
  399. #define    SIOCS80211         _IOW('i', 234, struct ieee80211req)
  400. #define    SIOCG80211        _IOWR('i', 235, struct ieee80211req)
  401. #define    SIOCG80211STATS        _IOWR('i', 236, struct ifreq)
  402. #define    SIOC80211IFCREATE    _IOWR('i', 237, struct ifreq)
  403. #define    SIOC80211IFDESTROY     _IOW('i', 238, struct ifreq)
  404.  
  405. #define IEEE80211_IOC_SSID        1
  406. #define IEEE80211_IOC_NUMSSIDS        2
  407. #define IEEE80211_IOC_WEP        3
  408. #define     IEEE80211_WEP_NOSUP        -1
  409. #define     IEEE80211_WEP_OFF        0
  410. #define     IEEE80211_WEP_ON        1
  411. #define     IEEE80211_WEP_MIXED        2
  412. #define IEEE80211_IOC_WEPKEY        4
  413. #define IEEE80211_IOC_NUMWEPKEYS    5
  414. #define IEEE80211_IOC_WEPTXKEY        6
  415. #define IEEE80211_IOC_AUTHMODE        7
  416. #define IEEE80211_IOC_STATIONNAME    8
  417. #define IEEE80211_IOC_CHANNEL        9
  418. #define IEEE80211_IOC_POWERSAVE        10
  419. #define     IEEE80211_POWERSAVE_NOSUP    -1
  420. #define     IEEE80211_POWERSAVE_OFF        0
  421. #define     IEEE80211_POWERSAVE_CAM        1
  422. #define     IEEE80211_POWERSAVE_PSP        2
  423. #define     IEEE80211_POWERSAVE_PSP_CAM    3
  424. #define     IEEE80211_POWERSAVE_ON        IEEE80211_POWERSAVE_CAM
  425. #define IEEE80211_IOC_POWERSAVESLEEP    11
  426. #define    IEEE80211_IOC_RTSTHRESHOLD    12
  427. #define IEEE80211_IOC_PROTMODE        13
  428. #define     IEEE80211_PROTMODE_OFF        0
  429. #define     IEEE80211_PROTMODE_CTS        1
  430. #define     IEEE80211_PROTMODE_RTSCTS    2
  431. #define    IEEE80211_IOC_TXPOWER        14    /* global tx power limit */
  432. #define    IEEE80211_IOC_BSSID        15
  433. #define    IEEE80211_IOC_ROAMING        16    /* roaming mode */
  434. #define    IEEE80211_IOC_PRIVACY        17    /* privacy invoked */
  435. #define    IEEE80211_IOC_DROPUNENCRYPTED    18    /* discard unencrypted frames */
  436. #define    IEEE80211_IOC_WPAKEY        19
  437. #define    IEEE80211_IOC_DELKEY        20
  438. #define    IEEE80211_IOC_MLME        21
  439. #define    IEEE80211_IOC_OPTIE        22    /* optional info. element */
  440. #define    IEEE80211_IOC_SCAN_REQ        23
  441. #define    IEEE80211_IOC_SCAN_RESULTS    24
  442. #define    IEEE80211_IOC_COUNTERMEASURES    25    /* WPA/TKIP countermeasures */
  443. #define    IEEE80211_IOC_WPA        26    /* WPA mode (0,1,2) */
  444. #define    IEEE80211_IOC_CHANLIST        27    /* channel list */
  445. #define    IEEE80211_IOC_WME        28    /* WME mode (on, off) */
  446. #define    IEEE80211_IOC_HIDESSID        29    /* hide SSID mode (on, off) */
  447. #define IEEE80211_IOC_APBRIDGE        30    /* AP inter-sta bridging */
  448. #define    IEEE80211_IOC_MCASTCIPHER    31    /* multicast/default cipher */
  449. #define    IEEE80211_IOC_MCASTKEYLEN    32    /* multicast key length */
  450. #define    IEEE80211_IOC_UCASTCIPHERS    33    /* unicast cipher suites */
  451. #define    IEEE80211_IOC_UCASTCIPHER    34    /* unicast cipher */
  452. #define    IEEE80211_IOC_UCASTKEYLEN    35    /* unicast key length */
  453. #define    IEEE80211_IOC_DRIVER_CAPS    36    /* driver capabilities */
  454. #define    IEEE80211_IOC_KEYMGTALGS    37    /* key management algorithms */
  455. #define    IEEE80211_IOC_RSNCAPS        38    /* RSN capabilities */
  456. #define    IEEE80211_IOC_WPAIE        39    /* WPA information element */
  457. #define    IEEE80211_IOC_STA_STATS        40    /* per-station statistics */
  458. #define    IEEE80211_IOC_MACCMD        41    /* MAC ACL operation */
  459. #define    IEEE80211_IOC_TXPOWMAX        43    /* max tx power for channel */
  460. #define    IEEE80211_IOC_STA_TXPOW        44    /* per-station tx power limit */
  461. #define    IEEE80211_IOC_STA_INFO        45    /* station/neighbor info */
  462. #define    IEEE80211_IOC_WME_CWMIN        46    /* WME: ECWmin */
  463. #define    IEEE80211_IOC_WME_CWMAX        47    /* WME: ECWmax */
  464. #define    IEEE80211_IOC_WME_AIFS        48    /* WME: AIFSN */
  465. #define    IEEE80211_IOC_WME_TXOPLIMIT    49    /* WME: txops limit */
  466. #define    IEEE80211_IOC_WME_ACM        50    /* WME: ACM (bss only) */
  467. #define    IEEE80211_IOC_WME_ACKPOLICY    51    /* WME: ACK policy (!bss only)*/
  468. #define    IEEE80211_IOC_DTIM_PERIOD    52    /* DTIM period (beacons) */
  469. #define    IEEE80211_IOC_BEACON_INTERVAL    53    /* beacon interval (ms) */
  470. #define    IEEE80211_IOC_ADDMAC        54    /* add sta to MAC ACL table */
  471. #define    IEEE80211_IOC_DELMAC        55    /* del sta from MAC ACL table */
  472. #define    IEEE80211_IOC_FF        56    /* ATH fast frames (on, off) */
  473. #define    IEEE80211_IOC_TURBOP        57    /* ATH turbo' (on, off) */
  474.  
  475. /*
  476.  * Scan result data returned for IEEE80211_IOC_SCAN_RESULTS.
  477.  */
  478. struct ieee80211req_scan_result {
  479.     u_int16_t isr_len;        /* length (mult of 4) */
  480.     u_int16_t isr_freq;        /* MHz */
  481.     u_int16_t isr_flags;        /* channel flags */
  482.     u_int8_t isr_noise;
  483.     u_int8_t isr_rssi;
  484.     u_int8_t isr_intval;        /* beacon interval */
  485.     u_int16_t isr_capinfo;        /* capabilities */
  486.     u_int8_t isr_erp;        /* ERP element */
  487.     u_int8_t isr_bssid[IEEE80211_ADDR_LEN];
  488.     u_int8_t isr_nrates;
  489.     u_int8_t isr_rates[IEEE80211_RATE_MAXSIZE];
  490.     u_int8_t isr_ssid_len;        /* SSID length */
  491.     u_int8_t isr_ie_len;        /* IE length */
  492.     u_int8_t isr_pad[5];
  493.     /* variable length SSID followed by IE data */
  494. };
  495.  
  496. #endif /* __FreeBSD__ */
  497.  
  498. #ifdef __linux__
  499. /*
  500.  * Wireless Extensions API, private ioctl interfaces.
  501.  *
  502.  * NB: Even-numbered ioctl numbers have set semantics and are privileged!
  503.  *     (regardless of the incorrect comment in wireless.h!)
  504.  */
  505. #ifdef __KERNEL__
  506. #include <linux/if.h>
  507. #endif
  508. #define    IEEE80211_IOCTL_SETPARAM    (SIOCIWFIRSTPRIV+0)
  509. #define    IEEE80211_IOCTL_GETPARAM    (SIOCIWFIRSTPRIV+1)
  510. #define    IEEE80211_IOCTL_SETMODE        (SIOCIWFIRSTPRIV+2)
  511. #define    IEEE80211_IOCTL_GETMODE        (SIOCIWFIRSTPRIV+3)
  512. #define    IEEE80211_IOCTL_SETWMMPARAMS    (SIOCIWFIRSTPRIV+4)
  513. #define    IEEE80211_IOCTL_GETWMMPARAMS    (SIOCIWFIRSTPRIV+5)
  514. #define    IEEE80211_IOCTL_SETCHANLIST    (SIOCIWFIRSTPRIV+6)
  515. #define    IEEE80211_IOCTL_GETCHANLIST    (SIOCIWFIRSTPRIV+7)
  516. #define    IEEE80211_IOCTL_CHANSWITCH    (SIOCIWFIRSTPRIV+8)
  517. #define    IEEE80211_IOCTL_GETCHANINFO    (SIOCIWFIRSTPRIV+13)
  518. #define    IEEE80211_IOCTL_SETOPTIE    (SIOCIWFIRSTPRIV+14)
  519. #define    IEEE80211_IOCTL_GETOPTIE    (SIOCIWFIRSTPRIV+15)
  520. #define    IEEE80211_IOCTL_SETMLME        (SIOCIWFIRSTPRIV+16)
  521. #define    IEEE80211_IOCTL_SETKEY        (SIOCIWFIRSTPRIV+18)
  522. #define    IEEE80211_IOCTL_DELKEY        (SIOCIWFIRSTPRIV+20)
  523. #define    IEEE80211_IOCTL_ADDMAC        (SIOCIWFIRSTPRIV+22)
  524. #define    IEEE80211_IOCTL_DELMAC        (SIOCIWFIRSTPRIV+24)
  525. #define    IEEE80211_IOCTL_WDSADDMAC    (SIOCIWFIRSTPRIV+26)
  526. #define    IEEE80211_IOCTL_WDSDELMAC    (SIOCIWFIRSTPRIV+28)
  527. #define    IEEE80211_IOCTL_KICKMAC        (SIOCIWFIRSTPRIV+30)
  528. enum {
  529.     IEEE80211_WMMPARAMS_CWMIN       = 1,
  530.     IEEE80211_WMMPARAMS_CWMAX       = 2,
  531.     IEEE80211_WMMPARAMS_AIFS           = 3,
  532.     IEEE80211_WMMPARAMS_TXOPLIMIT    = 4,
  533.     IEEE80211_WMMPARAMS_ACM        = 5,
  534.     IEEE80211_WMMPARAMS_NOACKPOLICY    = 6,    
  535. };
  536. enum {
  537.     IEEE80211_PARAM_TURBO        = 1,    /* turbo mode */
  538.     IEEE80211_PARAM_MODE        = 2,    /* phy mode (11a, 11b, etc.) */
  539.     IEEE80211_PARAM_AUTHMODE    = 3,    /* authentication mode */
  540.     IEEE80211_PARAM_PROTMODE    = 4,    /* 802.11g protection */
  541.     IEEE80211_PARAM_MCASTCIPHER    = 5,    /* multicast/default cipher */
  542.     IEEE80211_PARAM_MCASTKEYLEN    = 6,    /* multicast key length */
  543.     IEEE80211_PARAM_UCASTCIPHERS    = 7,    /* unicast cipher suites */
  544.     IEEE80211_PARAM_UCASTCIPHER    = 8,    /* unicast cipher */
  545.     IEEE80211_PARAM_UCASTKEYLEN    = 9,    /* unicast key length */
  546.     IEEE80211_PARAM_WPA        = 10,    /* WPA mode (0,1,2) */
  547.     IEEE80211_PARAM_ROAMING        = 12,    /* roaming mode */
  548.     IEEE80211_PARAM_PRIVACY        = 13,    /* privacy invoked */
  549.     IEEE80211_PARAM_COUNTERMEASURES    = 14,    /* WPA/TKIP countermeasures */
  550.     IEEE80211_PARAM_DROPUNENCRYPTED    = 15,    /* discard unencrypted frames */
  551.     IEEE80211_PARAM_DRIVER_CAPS    = 16,    /* driver capabilities */
  552.     IEEE80211_PARAM_MACCMD        = 17,    /* MAC ACL operation */
  553.     IEEE80211_PARAM_WMM        = 18,    /* WMM mode (on, off) */
  554.     IEEE80211_PARAM_HIDESSID    = 19,    /* hide SSID mode (on, off) */
  555.     IEEE80211_PARAM_APBRIDGE        = 20,   /* AP inter-sta bridging */
  556.     IEEE80211_PARAM_KEYMGTALGS    = 21,    /* key management algorithms */
  557.     IEEE80211_PARAM_RSNCAPS        = 22,    /* RSN capabilities */
  558.     IEEE80211_PARAM_INACT        = 23,    /* station inactivity timeout */
  559.     IEEE80211_PARAM_INACT_AUTH    = 24,    /* station auth inact timeout */
  560.     IEEE80211_PARAM_INACT_INIT    = 25,    /* station init inact timeout */
  561.     IEEE80211_PARAM_ABOLT        = 26,    /* Atheros Adv. Capabilities */
  562.     IEEE80211_PARAM_DTIM_PERIOD    = 28,    /* DTIM period (beacons) */
  563.     IEEE80211_PARAM_BEACON_INTERVAL    = 29,    /* beacon interval (ms) */
  564.     IEEE80211_PARAM_DOTH        = 30,    /* 11.h is on/off */
  565.     IEEE80211_PARAM_PWRTARGET    = 31,    /* Current Channel Pwr Constraint */
  566.     IEEE80211_PARAM_GENREASSOC    = 32,    /* Generate a reassociation request */
  567.     IEEE80211_PARAM_COMPRESSION    = 33,    /* compression */
  568.     IEEE80211_PARAM_FF        = 34,    /* fast frames support  */
  569.     IEEE80211_PARAM_XR        = 35,    /* XR support */
  570.     IEEE80211_PARAM_BURST        = 36,    /* burst mode */
  571.     IEEE80211_PARAM_PUREG        = 37,    /* pure 11g (no 11b stations) */
  572.     IEEE80211_PARAM_AR        = 38,    /* AR support */
  573.     IEEE80211_PARAM_WDS        = 39,    /* Enable 4 address processing */
  574.     IEEE80211_PARAM_BGSCAN        = 40,    /* bg scanning (on, off) */
  575.     IEEE80211_PARAM_BGSCAN_IDLE    = 41,    /* bg scan idle threshold */
  576.     IEEE80211_PARAM_BGSCAN_INTERVAL    = 42,    /* bg scan interval */
  577.     IEEE80211_PARAM_MCAST_RATE    = 43,    /* Multicast Tx Rate */
  578.     IEEE80211_PARAM_COVERAGE_CLASS    = 44,    /* coverage class */
  579.     IEEE80211_PARAM_COUNTRY_IE    = 45,    /* enable country IE */
  580.     IEEE80211_PARAM_SCANVALID    = 46,    /* scan cache valid threshold */
  581.     IEEE80211_PARAM_ROAM_RSSI_11A    = 47,    /* rssi threshold in 11a */
  582.     IEEE80211_PARAM_ROAM_RSSI_11B    = 48,    /* rssi threshold in 11b */
  583.     IEEE80211_PARAM_ROAM_RSSI_11G    = 49,    /* rssi threshold in 11g */
  584.     IEEE80211_PARAM_ROAM_RATE_11A    = 50,    /* tx rate threshold in 11a */
  585.     IEEE80211_PARAM_ROAM_RATE_11B    = 51,    /* tx rate threshold in 11b */
  586.     IEEE80211_PARAM_ROAM_RATE_11G    = 52,    /* tx rate threshold in 11g */
  587.     IEEE80211_PARAM_UAPSDINFO    = 53,    /* value for qos info field */
  588.     IEEE80211_PARAM_SLEEP        = 54,    /* force sleep/wake */
  589.     IEEE80211_PARAM_QOSNULL        = 55,    /* force sleep/wake */
  590.     IEEE80211_PARAM_PSPOLL        = 56,    /* force ps-poll generation (sta only) */
  591.     IEEE80211_PARAM_EOSPDROP    = 57,    /* force uapsd EOSP drop (ap only) */
  592.     IEEE80211_PARAM_MARKDFS        = 58,    /* mark a dfs interference channel when found */
  593.     IEEE80211_PARAM_REGCLASS    = 59,    /* enable regclass ids in country IE */
  594. };
  595.  
  596. #define    SIOCG80211STATS            (SIOCDEVPRIVATE+2)
  597. /* NB: require in+out parameters so cannot use wireless extensions, yech */
  598. #define    IEEE80211_IOCTL_GETKEY        (SIOCDEVPRIVATE+3)
  599. #define    IEEE80211_IOCTL_GETWPAIE    (SIOCDEVPRIVATE+4)
  600. #define    IEEE80211_IOCTL_STA_STATS    (SIOCDEVPRIVATE+5)
  601. #define    IEEE80211_IOCTL_STA_INFO    (SIOCDEVPRIVATE+6)
  602. #define    SIOC80211IFCREATE        (SIOCDEVPRIVATE+7)
  603. #define    SIOC80211IFDESTROY         (SIOCDEVPRIVATE+8)
  604. #define    IEEE80211_IOCTL_SCAN_RESULTS    (SIOCDEVPRIVATE+9)
  605.  
  606. struct ieee80211_clone_params {
  607.     char icp_name[IFNAMSIZ];        /* device name */
  608.     u_int16_t icp_opmode;            /* operating mode */
  609.     u_int16_t icp_flags;            /* see below */
  610. #define    IEEE80211_CLONE_BSSID    0x0001        /* allocate unique mac/bssid */
  611. #define    IEEE80211_NO_STABEACONS    0x0002        /* Do not setup the station beacon timers */
  612. };
  613.  
  614. #endif /* __linux__ */
  615.  
  616. #endif /* _NET80211_IEEE80211_IOCTL_H_ */
  617.